package cn.qzzg.service.impl;

import cn.qzzg.common.exceptlion.CommonException;
import cn.qzzg.dto.PagingQueryDTO;
import cn.qzzg.enums.CodeEnum;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.qzzg.pojo.Review;
import cn.qzzg.service.ReviewService;
import cn.qzzg.mapper.ReviewMapper;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;

import java.util.List;

/**
 * @author Nine
 * @description 针对表【review(复查信息表)】的数据库操作Service实现
 * @createDate 2023-04-01 18:19:54
 */
@Service
public class ReviewServiceImpl extends ServiceImpl<ReviewMapper, Review>
        implements ReviewService {
    /**
     * 通用条件构造器
     */
    private LambdaQueryWrapper<Review> wrapper;


    @Override
    public Page<Review> findPage(PagingQueryDTO<Review> pagingQueryDTO) {
        wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Review::getPotTimeId, pagingQueryDTO.getData().getPotTimeId())
                .orderByDesc(Review::getCreateTime);
        return page(pagingQueryDTO.getPage(), wrapper);
    }

    /**
     * 添加一条数据
     *
     * @param obj 需要添加的对象
     * @return 添加的对象ID
     */
    @Override
    public String saveOne(Review obj) {
        if (ObjectUtils.isEmpty(obj))
            throw new CommonException(CodeEnum.USER_ERROR_A0410);
        obj.setReviewId(null);
        save(obj);
        return obj.getReviewId().toString();
    }

    /**
     * 查询数据是否存在
     *
     * @param objId 需要查询的对象ID
     * @return 是否存在
     */
    @Override
    public boolean check(String objId) {
        wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(StringUtils.isNotEmpty(objId), Review::getTestTubeId, objId);
        return count(wrapper) > 0;
    }

    /**
     * 通过ID查询一条数据
     *
     * @param objId 需要查询的对象ID
     * @return 结果对象
     */
    @Override
    public Review findByTestTubeId(String objId) {
        if (ObjectUtils.isEmpty(objId))
            throw new CommonException(CodeEnum.USER_ERROR_A0410);
        wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Review::getTestTubeId,objId);
        return getOne(wrapper);
    }

    @Override
    public Review findInfo(Review review) {
        wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(review.getTestTubeId()!=null,Review::getTestTubeId,review.getTestTubeId())
                .eq(review.getPotTimeId()!=null,Review::getPotTimeId,review.getPotTimeId());
        return getOne(wrapper);
    }


    /**
     * 修改数据
     *
     * @param obj 需要修改的对象
     * @return 修改是否成功
     */
    @Override
    public boolean updateOne(Review obj) {
        if (ObjectUtils.isEmpty(obj))
            throw new CommonException(CodeEnum.USER_ERROR_A0410);

        updateById(obj);
        return true;
    }

    /**
     * 通过ID删除一条数据
     *
     * @param objId 需要删除的对象ID
     * @return 删除是否成功
     */
    @Override
    public boolean removeOne(String objId) {
        if (ObjectUtils.isEmpty(objId))
            throw new CommonException(CodeEnum.USER_ERROR_A0410);

        wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Review::getTestTubeId,objId);
        remove(wrapper);
        return true;
    }
}




